﻿package com.medsys.dao;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.medsys.model.Funcionario;
import com.medsys.model.Medico;
import com.medsys.model.Paciente;

/**
 * Classe para auxiliar a utiliza��o de se��es no DAO.
 * @author Felipe Lauksas
 *
 */
public class DAOFactory {
	
	private Session session;
	private Transaction tx;	
	/**
	 * Construtor privado para criar se��o.
	 */
	private DAOFactory(){
		this.session = HibernateUtil.getSessionFactory();
	}
	/**
	 * Classe est�tica para retornar uma Se��o para o DAO
	 * @return {@link DAOFactory} com se��o para utiliza��o.
	 */
	public static DAOFactory getDAOFactory(){
		return new DAOFactory();
	}	
	/**
	 * M�todo para iniciar a transa��o da se��o.
	 */
	public void iniciarTransacao(){
		try {
			this.tx = this.session.beginTransaction();
		} catch (HibernateException e) {
			
		}	
	}	
	/**
	 * M�todo para a cancelar a transa��o corrente.
	 */
	public void cancelarTransacao(){
		try {
			this.tx.rollback();
			this.tx = null;
		} catch (HibernateException e) {
			
		}
	}
	/**
	 * M�todo para cancelar a transa��o corrente.
	 */
	public void encerrarTransacao(){
		try {
			if(this.tx != null){		
				this.tx.commit();
			}
		} catch (HibernateException e) {
			
		}
	}
	/**
	 * M�todo para fechar a se��o corrente.
	 */
	public void fechar(){
		try {
			this.session.close();
		} catch (HibernateException e) {
			
		}
	}
	/**
	 * M�todo para criar o DAO de {@link Paciente}.
	 * @return {@link PacienteDAO}.
	 */
	public PacienteDAO getPacienteDAO(){
		return new PacienteDAO(this.session);
	}
	/**
	 * M�todo para criar o DAO de {@link Medico}.
	 * @return
	 */
	public MedicoDAO getMedicoDAO(){
		return new MedicoDAO(this.session);
	}
	/**
	 * M�todo para criar o DAO de {@link Funcionario}.
	 * @return
	 */
	public FuncionarioDAO getFuncionarioDAO(){
		return new FuncionarioDAO(this.session);
	}
	
	public ConsultaDAO getConsultaDAO() {		
		return new ConsultaDAO(this.session);
	}
	
	public ReceituarioDAO getReceituarioDAO() {		
		return new ReceituarioDAO(this.session);
	}
	
	public AtestadoDAO getAtestadoDAO() {		
		return new AtestadoDAO(this.session);
	}
	
}
